/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package memoriavirtual;

import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Pedro Freitas
 */
public class MemoriaSecundaria {

    private int tamanho;
    private int tamanhoQuadro;
    private int qtdQuadros;
    private int qtdQuadrosDisponiveis;
    private Quadro[] quadros;
    private int ultimoQuadroPreenchido;

    public int getUltimoQuadroPreenchido() {
        return ultimoQuadroPreenchido;
    }

    public void incrementaUltimoQuadroPreenchido() {
        this.ultimoQuadroPreenchido++;
    }

    public Quadro[] getQuadros() {
        return quadros;
    }

    public MemoriaSecundaria() {
    }

    public MemoriaSecundaria(int tamanho, int tamanhoQuadro) {
        this.tamanho = tamanho;
        this.tamanhoQuadro = tamanhoQuadro;
        this.qtdQuadros = tamanho / tamanhoQuadro;
        this.qtdQuadrosDisponiveis = qtdQuadros;
        this.quadros = new Quadro[qtdQuadros];
        for (int i = 0; i < quadros.length; i++) {
            quadros[i] = new Quadro(new Pagina(-1, "", -1, -1, -1, false));
        }
    }

    public boolean isCheia() {
        return this.qtdQuadrosDisponiveis == 0;
    }

    public void decrementaQtdQuadrosDisponiveis() {
        this.qtdQuadrosDisponiveis--;
    }

    public int getQuadrosDisponiveis() {
        return qtdQuadrosDisponiveis;
    }

    public int getQtdQuadros() {
        return qtdQuadros;
    }

    public Quadro getQuadro(int i) {
        return quadros[i];
    }

    public void setQuadro(Quadro quadro, int i) {
        quadros[i] = quadro;
    }

    public DefaultTableModel getMS() {
        DefaultTableModel resp = new DefaultTableModel();
        Object[] identificadores = {"Número do Quadro", "Endereço Inicial", "Endereço Final", "Momento de Carga", "Momento Referencia", " Nome do processo", "Número da pagina"};
        resp.setColumnIdentifiers(identificadores);
        Object[] aux = new Object[7];
        for (int i = 0; i < qtdQuadros; i++) {
            aux[0] = i;
            aux[1] = i * tamanhoQuadro;
            aux[2] = (i * tamanhoQuadro + tamanhoQuadro) - 1;
            aux[3] = quadros[i].getPagina().getMomentoCarga();
            aux[4] = quadros[i].getPagina().getMomentoReferencia();
            aux[5] = quadros[i].getPagina().getNomeProc();
            aux[6] = quadros[i].getPagina().getNumero();
            resp.addRow(aux);
        }
        return resp;
    }

    public int buscaMS(String nomeProc) {
        int resp = -1;
        int i = 0;
        while (i < qtdQuadros) {
            if (quadros[i].getPagina().getNomeProc().equals(nomeProc)) {
                return i;
            }
            i++;
        }
        return resp;
    }
}
